package com.java.star.mall.front.service;

import com.java.star.mall.common.response.JsonPage;
import com.java.star.mall.front.pojo.param.AddressParam;
import com.java.star.mall.front.pojo.param.UserLocationParam;
import com.java.star.mall.front.pojo.vo.AddressVO;
import com.java.star.mall.front.pojo.vo.GeoCoderAddressVO;

/**
 * 地址Service
 */
public interface AddressService {

    /**
     * 根据经纬度获取用户地址
     *
     * @param userLocationParam 用户经纬度参数
     * @return 腾讯地图逆地址解析的VO对象
     */
    GeoCoderAddressVO getUserLocation(UserLocationParam userLocationParam);


    /**
     * 根据地市信息获取用户地址
     *
     * @param address 地市信息
     * @return 腾讯地图逆地址解析的VO对象
     */
    GeoCoderAddressVO getUserLocationByCityInfo(String address);

    /**
     * 新增收货地址
     *
     * @param addressParam 收货地址参数
     */
    void insert(AddressParam addressParam);

    /**
     * 分页查询用户收货地址
     *
     * @param page     当前页数
     * @param pageSize 每页记录数
     * @return 分页数据
     */
    JsonPage<AddressVO> list(Integer page, Integer pageSize);

    /**
     * 删除收货地址
     *
     * @param addressId 地址id
     */
    void delete(Integer addressId);

    /**
     * 修改收货地址的默认状态
     *
     * @param addressId 地址id
     */
    void updateDefault(Integer addressId);

    /**
     * 根据id查询收货地址信息
     *
     * @param addressId 地址id
     * @return 收货地址VO对象
     */
    AddressVO getAddress(Integer addressId);

    /**
     * 修改收货地址
     *
     * @param addressParam 收货地址参数
     */
    void update(AddressParam addressParam);

    /**
     * 根据用户id查询用户默认地址
     *
     * @param userId 用户id
     * @return 收货地址VO
     */
    AddressVO getDefaultAddress(Integer userId);
}
